package cn.shujuhai.common.service;


import cn.shujuhai.common.domain.DepartmentRole;
import cn.shujuhai.common.domain.LoginRequest;
import cn.shujuhai.common.domain.SysMenu;
import cn.shujuhai.common.domain.SysUser;
import cn.shujuhai.common.pluging.data.ResultVo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @author NiuYahu
 * @description 针对表【sys_user(用户表)】的数据库操作Service
 * @createDate 2024-09-25 16:58:56
 */
public interface SysUserService extends IService<SysUser> {
    /**
     * 登录方法
     *
     * @param loginRequest
     * @param session
     * @return
     */
    Long login(LoginRequest loginRequest, HttpSession session);


    /**
     * 查询数据库中是否有对应的用户名和密码
     *
     * @param username
     * @param password
     * @return
     */
    boolean checkUser(String username, String password);

    /**
     * 通过用户名获取用户Id
     *
     * @param username
     * @return
     */
    Long getUserIdByUsername(String username);

    /**
     * 通过用户id获得用信息
     *
     * @param userId
     * @return
     */
    SysUser getUserById(Long userId);

    /**
     * 获取用户权限列表
     *
     * @param userId
     * @return
     */
    List<String> getPermissionList(Long userId);

    /**
     * 获取用户角色列表
     *
     * @param userId
     * @return
     */
    List<String> getRoleList(Long userId);

    /**
     * /**
     * 根据用户ID查询系统用户信息
     *
     * @param userId 用户ID
     * @return 返回对应的系统用户信息对象（SysUser），如果未找到则返回null
     */
    SysUser selectById(Integer userId);

    /**
     * 分页查询系统用户信息
     *
     * @param username 用户名（可为null，不为null时进行模糊查询）
     * @param name     真实姓名（可为null，不为null时进行模糊查询）
     * @param page     当前页码（从1开始）
     * @param pageSize 每页显示的记录数
     * @return 返回包含分页信息和系统用户列表的ResultVo对象，其中PageInfo<SysUser>包含了分页的详细信息，如总记录数、总页数等
     */
    ResultVo<PageInfo<SysUser>> getSysUserPageInfo(String username, String name, Integer page, Integer pageSize, Long departmentId);


    /**
     * 启用｜禁用 用户
     *
     * @param userId 用户id
     * @return 获取修改id, 返回更新后的用户
     */
    ResultVo<SysUser> enableUser(Integer userId);

    /**
     * 上传用户头像
     *
     * @param file 上传的文件
     * @return url
     * @Param avatar 用户头像
     */
    ResultVo<?> uploadAvatar1(MultipartFile file) throws IOException;

    /**
     * 用户新增
     *
     * @param sysUser
     * @return null
     */
    ResultVo<Void> add(SysUser sysUser);

    /**
     * 用户编辑
     *
     * @param sysUser
     * @return null
     */
    ResultVo<SysUser> edit(SysUser sysUser);

    /**
     * 根据用户id获取对应角色id
     *
     * @param userId
     * @return 角色id集合
     */
    ResultVo<?> getRoleIdsByUserId(Long userId);

    /**
     * 根据用户id删除对应用户
     *
     * @param userId
     * @return null
     */
    ResultVo<SysUser> removeId(Integer userId);


    ResultVo<?> userResetPassword(Long userId);

    ResultVo<?> updatePassword(String oldPassword, String newPassword);

    List<SysMenu> getUserMenuByPerm(HttpServletRequest request);

    ResultVo<SysUser> getUserByLoginId();

    ResultVo<SysUser> updateLoginAvatar(String avatar);

    String getUsernameById(Long userId);


    boolean isPasswordExpired(Long userId);

    int checkAndHandlePasswordExpiration(Long userId);

    ResultVo<SysUser> updateUserInfo(SysUser sysUser);

    ResultVo<?> getUserList();

    ResultVo<?> fpRole(DepartmentRole departmentRole);

    ResultVo<?> getRoleByUserId(Long userId);

    ResultVo<?> getUserDepartmentRoles(Long userId);

    ResultVo<?> importUser(MultipartFile file) throws IOException;

    ResultVo<?> getUserByDepartmentId(Long departmentId);
}
